// 第一个实现的是 实用类
// 通⽤功能类，与业务⽆关的功能实现
//  1. 获取系统时间
//  2. 获取⽂件⼤⼩
//  3. 创建⽬录
//  4. 获取⽂件所在⽬录
#pragma once
#include <iostream>
#include <time.h>
#include <string>
#include <sys/stat.h>
using namespace std;
namespace LOG
{
    namespace util
    {
        class Data
        {
        public:
            static time_t getime()
            {
                return (time_t)time(nullptr);
            }
        };
        class File
        {
        public:
            static bool IsExist(string &pathename)
            {
                struct stat st;
                return (stat(pathename.c_str(), &st) > 0); // 获取一个文件的属性，也可以判断一个文件是否存在
            }
            static string path(string pathename)
            {
                int pos = pathename.find_last_of("/\\");
                if (pos == string::npos)
                    return ".";
                return pathename.substr(0, pos + 1);
            }
            static void creatDirectory(string pathename)
            {
                // 创建目录
                //.abc/def/jl

                size_t pos = 0, idx = 0; // idx为上一个/或者\符号的位置
                while (idx < pathename.size())
                {
                    pos = pathename.find_first_of("/\\", idx); // 从idx开始找找到第一个为/或者\的位置
                    if (pos == string::npos)
                    {
                        // 如果没有找到 直接创建
                        mkdir(pathename.c_str(), 0777);
                    }
                    string Parents_path = pathename.substr(0, pos+1);
                    if (IsExist(Parents_path))
                    {
                        // 如果父路径已经存在
                        idx = pos + 1;
                        continue;
                    }
                    mkdir(Parents_path.c_str(), 0777);
                    idx = pos + 1;
                }
            }
        };
    }

}
